# -*- coding: utf-8 -*-
# @Time    : 2025/4/5 12:57
# @Author  : wangwei
# @File    : testScan.py

import socket
import time

from PySide2.QtCore import QFile
from PySide2.QtWidgets import QApplication, QMainWindow
from PySide2.QtUiTools import QUiLoader

def tcp_port_scan(ip, port):
    # 1. 创建套接字
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 2. 设置超时时间
    sock.settimeout(1)
    res=False
    try:
        # 3. 发送请求并判断结果
        result = sock.connect_ex((ip, port))
        if result == 0:
            print(f"{ip}:{port} 是开放的")
            res = True

        else:
            print(f"{ip}:{port} 是没有开放的")
            res = False
    except Exception as e:
        print(f"{ip}:{port} 执行异常: {e}")
        res = False
    finally:
        # 4. 关闭套接字
        sock.close()
    return res





#1.创建一个应用对象
app = QApplication([])
# 动态加载 .ui 文件
#2.读取qt文件（xxx.ui）
qfile=QFile("testScan.ui")
#3.在内存中打开这个ui文件
qfile.open(QFile.ReadOnly)
#4.加载对象成为ui对象
ui=QUiLoader().load(qfile)
#5.关闭文件
qfile.close()


def click():
    #1.获取ip地址
    ip=ui.ip.text()
    #2.获取端口号
    port = int(ui.port.text())

    #开始时间
    startTime=time.time()
    #3.运行函数tcp_port_scan(ip, port)
    res=tcp_port_scan(ip, port)
    # 结束时间123
    endTime = time.time()
    #4.耗时时间,单位ms
    takeTime=(endTime-startTime)*1000
    if res:
        info="端口号开放"
    else:
        info = "端口号没有开放"
    ui.textBrowser.append(f"本次查询耗时：{takeTime}ms\nIP地址：{ip}:{port}查询结果：{info}")


ui.pushButton.clicked.connect(click)
#显示ui界面
ui.show()
#应用运行
app.exec_()







# 测试函数
if __name__ == "__main__":
    #183.2.172.177 80
    tcp_port_scan("183.2.172.177", 80)
